1. Field of the Invention
The present invention relates to data processing, and more particularly to the field of machine inferencing and reasoning.
2. Description of Prior Art
Since the advent of the first electronic computers in the 1940's, computers have expanded from performing complex numeric calculations, to processing increasingly complex symbolic programming languages (FORTRAN, COBOL, Pascal, C, C++, Java, etc.), to representing text, documents, images, and speech. During this same period, programming approaches have evolved from assembly language (binary machine code) to structured programming techniques, and finally to current object-oriented approaches as represented by the Smalltalk, C++, and Java programming languages. These programming languages require programmers to specify the sequences of operations necessary to perform the data processing functions of the application, and are called procedural languages.
In the late 1950's, efforts began to explore the application of computers to machine reasoning in an effort to duplicate the reasoning ability of humans. This so-called artificial intelligence programming field produced several new languages, notably Lisp and Prolog, as well as an entirely different approach to programming, called declarative. In declarative programming, the data processing functions are specified by sets of if-then rules (the knowledge), sets of data to be processed, and a control program called an inference engine. Traditionally, the format and representation of the rules were tightly joined and tailored to the underlying inference engine. For example, Prolog, based on predicate logic, uses a unique syntax and a corresponding backchaining or goal-oriented inference strategy using backtracking. A popular forward chaining or data-driven inference approach uses a sorting network (Rete' network) popularized in the OPS/CLIPS rule languages. IBM developed a forward chaining product based on the PL/1 programming language, called KnowledgeTool in the late 1980s.
A more recent use of rules engines is in the processing of so-called business rules. Companies such as ILog and Blaze offer software products with tightly coupled rules languages (syntax) and inference engines. These inference engines allow business applications to externalize business logic and business policies by representing the logic as rules. Many of these products allow users to mix traditional application-code (written in C, C++, Cobol, Java, etc.) with their rule-based processing.
Inference engines are typically tied very closely to the knowledge representation. It is difficult or impossible to replace an inference engine in other systems of this type. Thus, as more function is provided, the inference engine gets heavier and more complex and therefore performance for smaller problems degrades.
Another problem in the prior art is that it is difficult or impossible to mix multiple types of inference modules with procedural code. It is often the case that initialization or setup code which is mainly procedural is required to be intermixed with the processing and evaluation of declarative rules-based knowledge.
Therefore, a need exists for an object-oriented framework for reasoning, having architecthed extension points for pluggable inference engines.